package image_api

import (
	"github.com/gin-gonic/gin"
	"giv-vue-blog/global"
	"giv-vue-blog/models/res"
	"giv-vue-blog/service"
	"giv-vue-blog/service/image_ser"
	"os"
)

// ImageUploadView 上传多个文件图片 返回图片的url
// ImageUploadView 创建图片
// @Tags 图片管理
// @Summary 创建图片
// @Description 创建图片
// @Param data body ImageUpdateRequest true "表示多个参数"
// @Router /api/image [post]
// @Produce json
// @Success 200 {object} res.Response{}
func (ImagesApi) ImageUploadView(c *gin.Context) {
	form, err := c.MultipartForm()
	if err != nil {
		res.FailedWithMsg(err.Error(), c)
		return
	}
	fileList, ok := form.File["images"] //字典的判断
	if !ok {
		res.FailedWithMsg("不存在的文件", c)
		return
	}
	//判断路径是否存在 不存在则创建
	basePath := global.Config.Upload.Path
	_, err = os.ReadDir(basePath) //如果读存储图片的路径失败 则创建目录
	if err != nil {
		err = os.MkdirAll(basePath, 0777)
		if err != nil {
			global.Log.Error(err)
		}
	}
	var resList []image_ser.FileUploadResponse
	for _, file := range fileList {
		//上传文件
		serviceRes := service.ServiceApp.ImageService.ImageUploadService(file)
		if !serviceRes.IsSuccess {
			resList = append(resList, serviceRes)
			continue
		}
		//如果七牛云的配置未打开是false，则进行本地保存
		if !global.Config.QiNiu.Enable {
			//本地还得保存
			err = c.SaveUploadedFile(file, serviceRes.FileName)
			if err != nil {
				global.Log.Error(err)
				serviceRes.Msg = err.Error()
				serviceRes.IsSuccess = false
				resList = append(resList, serviceRes)
				continue
			}
		}
		// 图个图片的hash值不存在且图片大小和后缀判断通过，但七牛云的配置是未打开的话，执行上传文件 如果上传失败，则返回失败的文件名 反之则打印上传成功并将图片的hash值写到数据库中
		resList = append(resList, serviceRes)
	}
	res.OkWithData(resList, c)
}
